/*
vuex的actions模块
 */
import {reqAddress, reqCategorys, reqShops, reqUserInfo, reqLogout,
  reqShopGoods, reqShopInfo, reqShopRatings, reqSearchShops} from '../api'
import {
  RECEIVE_ADDRESS,
  RECEIVE_CATEGORYS,
  RECEIVE_SHOPS,
  RECEIVE_USERINFO,
  RESET_USERINFO,
  RECEIVE_RATINGS,
  RECEIVE_INFO,
  RECEIVE_GOODS,
  FOOD_COUNT,
  RECEIVE_SEARCH_SHOPS,
} from './mutation-types'

export default {
  // 异步获取地址
  async getAddress({commit, state}) {
    const geohash = state.latitude + ',' + state.longitude;
    const result = await reqAddress(geohash);
    commit(RECEIVE_ADDRESS, {address: result.data});
  },

  // 异步获取分类列表
  async getCategorys({commit}) {
    const result = await reqCategorys();
    commit(RECEIVE_CATEGORYS, {categorys: result.data});
  },

  // 异步获取商家列表
  async getShops({commit, state}) {
    const {latitude, longitude} = state;
    const result = await reqShops({latitude, longitude});
    commit(RECEIVE_SHOPS, {shops: result.data})
  },

  //同步记录用户信息
  recordUserInfo({commit},userInfo) {
    commit(RECEIVE_USERINFO,{userInfo})
  },

  //异步获取用户信息
  async getUserInfo({commit}) {
    const result = await reqUserInfo();
    if(result.code ===0) {
      const userInfo = result.data;
      commit(RECEIVE_USERINFO,{userInfo});
    }
  },

  //异步登出
  async logout({commit}) {
    const result = await reqLogout();
    if(result.code ===0) {
      commit(RESET_USERINFO);
    }
  },

  // 异步获取商家信息
  async getShopInfo({commit}) {
    const result = await reqShopInfo();
    if(result.code===0) {
      const info = result.data;
      commit(RECEIVE_INFO, {info})
    }
  },

// 异步获取商家评价列表
  async getShopRatings({commit}, callback) {
    const result = await reqShopRatings();
    if(result.code===0) {
      const ratings = result.data;
      commit(RECEIVE_RATINGS, {ratings});
      callback && callback()
    }
  },

// 异步获取商家商品列表
  async getShopGoods({commit}, callback) {
    const result = await reqShopGoods();
    if(result.code===0) {
      const goods = result.data;
      commit(RECEIVE_GOODS, {goods});
      // 如果组件中传递了接收消息的回调函数, 数据更新后, 调用回调通知调用的组件
      callback && callback()
    }
  },

  //异步搜索商家列表
  async searchShop({commit, state}, keyword) {
    const {latitude, longitude} = state;
    const result = await reqSearchShops(latitude+','+longitude, keyword);
    commit(RECEIVE_SEARCH_SHOPS, {searchShops: result.data})
  },

}